package com.sentinel.web;

import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;

@RestController
public class HelloWorldController {

    @RequestMapping("/helloWorld")
    public String helloWorld(){
        try(Entry entry= SphU.entry("HelloWorld")){ // 使用限流规则 HelloWorld

            return "Sentinel ！"+System.currentTimeMillis();
        }catch (Exception e){
            e.printStackTrace();
            return "系统繁忙，请稍后！";  // 降级处理
        }
    }

    /**
     * 定义限流规则
     * PostConstruct 构造方法执行完后执行方法 定义和加载限流规则
     */
    /*@PostConstruct
    public void initFlowRules(){
        List<FlowRule> rules=new ArrayList<>(); // 定义限流规则集合
        FlowRule rule=new FlowRule();  // 定义限流规则
        rule.setResource("HelloWorld");  // 定义限流资源
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 定义限流规则类型
        rule.setCount(2); // 定义QPS阈值 每秒最多通过的请求个数
        rules.add(rule);  // 添加规则到集合
        FlowRuleManager.loadRules(rules); // 加载规则集合
    }*/
}

